package com.ruoyi.mobile.project.ums.controller;

import com.ruoyi.db.pms.domain.PmsGoods;
import com.ruoyi.db.ums.domain.UmsCollect;
import com.ruoyi.mobile.annotation.WxLoginUser;
import com.ruoyi.mobile.project.pms.service.WxPmsGoodsService;
import com.ruoyi.mobile.project.ums.service.WxUmsCollectService;
import com.ruoyi.mobile.utils.JacksonUtil;
import com.ruoyi.mobile.utils.ResponseUtil;
import com.ruoyi.mobile.validator.Order;
import com.ruoyi.mobile.validator.Sort;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 用户收藏服务
 */
@RestController
@RequestMapping("/wx/collect")
@Validated
public class WxCollectController
{
    private final Log logger = LogFactory.getLog(WxCollectController.class);

    @Autowired
    private WxUmsCollectService collectService;

    @Autowired
    private WxPmsGoodsService goodsService;

    /**
     * 用户收藏列表：依据用户编号与收藏类型，从收藏表ums_collect和商品表pms_goods中，查找如下显示信息
     * 收藏编号id,收藏类型type,收藏商品编号value_id,商品名称name,商品简介brief,商品图片pic_url,商品专柜价格retail_price
     *
     * @author 张涛
     * @param userId 用户ID
     * @param type   类型，如果是0则是商品收藏，如果是1则是专题收藏
     * @param page   分页页数
     * @param limit  分页大小
     * @return 用户收藏列表
     */
    @GetMapping("list")
    public Object list(@WxLoginUser Long userId,
                       @NotNull Integer type,
                       @RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer limit,
                       @Sort @RequestParam(defaultValue = "add_time") String sort,
                       @Order @RequestParam(defaultValue = "desc") String order)
    {
        if (userId == null)
        {
            return ResponseUtil.unlogin();
        }

        List<UmsCollect> collectList = collectService.queryByType(userId, type, page, limit, sort, order);

        return ResponseUtil.okList(collectList);

//        List<Object> collects = new ArrayList<>(collectList.size());
//        for (UmsCollect collect : collectList)
//        {
//            Map<String, Object> c = new HashMap<String, Object>();
//            c.put("id", collect.getId());
//            c.put("type", collect.getType());
//            c.put("valueId", collect.getValueId());
//
//            PmsGoods goods = goodsService.findById(collect.getValueId());
//            c.put("name", goods.getName());
//            c.put("brief", goods.getBrief());
//            c.put("picUrl", goods.getPicUrl());
//            c.put("retailPrice", goods.getRetailPrice());
//
//            collects.add(c);
//        }

//        return ResponseUtil.okList(collects, collectList);
    }

    /**
     * 用户收藏添加或删除
     * <p>
     * 如果商品没有收藏，则添加收藏；如果商品已经收藏，则删除收藏状态。
     *
     * @param userId 用户ID
     * @param body   请求内容，{ type: xxx, valueId: xxx }
     * @return 操作结果
     */
    @PostMapping("addordelete")
    public Object addordelete(@WxLoginUser Long userId, @RequestBody String body)
    {
        if (userId == null)
        {
            return ResponseUtil.unlogin();
        }

        Integer type = JacksonUtil.parseInteger(body, "type");
        Long valueId = JacksonUtil.parseLong(body, "valueId");
        if (!ObjectUtils.allNotNull(type, valueId))
        {
            return ResponseUtil.badArgument();
        }

        UmsCollect collect = collectService.queryByTypeAndValue(userId, type, valueId);

        if (collect != null)
        {
            collectService.deleteById(collect.getId());
        }
        else
        {
            collect = new UmsCollect();
            collect.setUserId(userId);
            collect.setValueId(valueId);
            collect.setType(type);
            collectService.add(collect);
        }

        return ResponseUtil.ok();
    }
}
